#ifndef _PID_h
#define _PID_h

#define LIMIT(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
#define DEGTORAD(deg)      ((deg) * 3.1415926535f / 180.0f) // 角度转弧度

//障碍物最大速度
typedef struct
{
float target_val; //目标值
float actual_val; //实际值
float err; //定义偏差值
float err_last; //定义上一个偏差值
float err_last_last; //定义上一个偏差值
float Kp,Ki,Kd; //定义比例、积分、微分系数
float integral; //定义积分值
int PWM_OUT;
float Angle;
}PIDtypedef;

extern float filtered_gyro;
extern PIDtypedef Moter_Left;
extern PIDtypedef Moter_Right;
extern PIDtypedef Servo;

void PID_Init();
int Moter_Left_PID(int target,int actual);
int Moter_Right_PID(int target,int actual);
float Servo_PID(float servo_err ,int Mud_err);
void Get_Motor_PID();
float Fuzz_PID(float servo_err ,int Mud_err);

#endif